<?php
// +----------------------------------------------------------------------
// | 杭州十禾信息科技有限公司
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2015 http://www.shelpe.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: LeePuman <ysyzlsm@163.com>
// +----------------------------------------------------------------------

/**
 * 系统行为扩展 用户资源控制检测
 */
class AuthPriviledgeBehavior extends Behavior {

    // 行为扩展的执行入口必须是run
    public function run(&$return)
    {
        if(strtolower(GROUP_NAME) === 'account') {
            $allowIp = C('ALLOW_IP');
            $current_ip = get_client_ip();
            if($allowIp && !in_array($current_ip, $allowIp)) {
                header('Status: 404 Not Found', TRUE, 404);
                header('HTTP/1.1 404 Not Found', TRUE, 404);
            }
        } elseif(strtolower(GROUP_NAME) === 'home') {
            // CLI MODE || TEST MODE 下不检查权限
            if(in_array(strtolower(MODULE_NAME), array('test', 'extension'))) {
                return true;
            }

            // 检查将访问的资源是否是公开资源 login check
            $rules = C("PUBLIC_RESOURCE");
            if(!isset($rules[MODULE_NAME]) || !in_array(ACTION_NAME,$rules[MODULE_NAME])) {
                
                //登录后才能访问的资源，先检查是否登录
                if(!session("me")){
                    if($this->isAjax()){
                        throw new NewzanException('需要登陆才能访问', RetStatus::AUTH_REQUIRED );
                    }else{
                        redirect(U('/login'));
                    }
                }
                
                //检查用户是否有店铺或者已经开通直通车，如果没有店铺或者没开通直通车则跳到错误页面
                $shop_status = session('shop_status');
                if($shop_status == 1) {
                    throw new NewzanException("您没有开通店铺，无法使用本软件服务" , RetStatus::NO_SHOP_DENY);
                } else if($shop_status == 2) {
                    throw new NewzanException("您没有开通直通车推广功能，无法使用本软件服务" , RetStatus::NO_ZTC_DENY);
                } else if($shop_status == 3) {
                    throw new NewzanException("", RetStatus::NOT_SERVER);
                }
            }
    	}
    }

    /**
     * 是否AJAX请求
     * @access protected
     * @return bool
     */
    protected function isAjax() {
        if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) {
            if('xmlhttprequest' == strtolower($_SERVER['HTTP_X_REQUESTED_WITH']))
                return true;
        }
        if(!empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')]))
            // 判断Ajax方式提交
            return true;
        return false;
    }
}